1. Technical Field
This invention generally relates to data processing, and more specifically relates to the sharing of resources between logical partitions in a logically partitioned computer system.
2. Background Art
Since the dawn of the computer age, computer systems have evolved into extremely sophisticated devices that may be found in many different settings. Computer systems typically include a combination of hardware (e.g., semiconductors, circuit boards, etc.) and software (e.g., computer programs). As advances in semiconductor processing and computer architecture push the performance of the computer hardware higher, more sophisticated computer software has evolved to take advantage of the higher performance of the hardware, resulting in computer systems today that are much more powerful than just a few years ago.
The combination of hardware and software on a particular computer system defines a computing environment. Different hardware platforms and different operating systems thus provide different computing environments. In recent years, engineers have recognized that it is possible to provide different computing environments on the same physical computer system by logically partitioning the computer system resources to different computing environments. The iSeries computer system developed by IBM is an example of a computer system that supports logical partitioning. If logical partitioning on an iSeries computer system is desired, partition manager code (referred to as a “hypervisor” in iSeries terminology) is installed that allows defining different computing environments on the same platform. Once the partition manager is installed, logical partitions may be created that define different computing environments. The partition manager manages the logical partitions to assure that they can share needed resources in the computer system while maintaining the separate computing environments defined by the logical partitions.
A computer system that includes multiple logical partitions typically shares resources between the logical partitions. For example, a computer system with a single CPU could have two logical partitions defined, with 50% of the CPU allocated to each logical partition, with 33% of the memory allocated to the first logical partition and 67% of the memory allocated to the second logical partition, and with two different I/O slots allocated to the two logical partitions, one per partition. Once logical partitions are defined and shared resources are allocated to the logical partitions, each logical partition acts as a separate computer system. Thus, in the example above that has a single computer system with two logical partitions, the two logical partitions will appear for all practical purposes to be two separate and distinct computer systems.
When logical partitions share a resource, such as an I/O adapter, one of the logical partitions is typically designated as the “owner” of the resource, and other logical partitions may share the resource by communicating with the logical partition that owns the resource. For the discussion herein, the term “hosting partition” refers to a logical partition that owns a resource, and the term “hosted partition” refers to a logical partition that does not own the resource but that desires to use (or share) the resource by communicating with the hosting partition. For example, when an application in a hosted partition needs to receive data from a shared network I/O adapter in the hosting partition (for example, a disk storage adapter), the application typically requests a read operation to the partition manager. A buffer is created in the hosting partition, and the request is forwarded to the I/O adapter device driver, which communicates the request to the I/O adapter. The I/O adapter then performs a direct memory access (DMA) transfer of the requested data to the buffer in the hosting partition. The partition manager then copies the data from the buffer in the hosting partition to a buffer in the hosted partition memory. The application in the hosted partition may then read the data from the buffer in its own memory.
The sharing of an I/O adapter between logical partitions as described above requires writing the data to the hosting partition memory, then copying that data to the hosted partition memory. Without a way for the I/O adapter to transfer data directly to the hosted partition memory, the sharing of virtual I/O adapters will suffer from penalties that slow system performance.